import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { fileURLToPath, URL } from 'node:url'

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
  // 加载环境变量
  // Vite 会根据 mode 加载对应的 .env 文件
  // dev 模式: .env + .env.dev
  // prd 模式: .env + .env.prd
  const env = loadEnv(mode, process.cwd())
  const port = parseInt(env.VITE_PORT || '3000')
  const apiTarget = env.VITE_API_TARGET || 'http://localhost:8080'
  const apiProxy = env.VITE_API_BASE_URL || '/devApi'

  // 二级路由部署路径，必须以 / 开头，可以以 / 结尾
  let base = env.VITE_BASE_URL || '/'
  if (base !== '/' && !base.endsWith('/')) {
    base = `${base}/`
  }

  return {
    base,
    plugins: [vue()],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    server: {
      port,
      open: false,
      // 开发环境代理配置（仅在开发服务器运行时生效，npm run dev）
      // 打包后的代码不会使用此代理，而是直接请求配置的 API 地址
      proxy: mode === 'dev' ? {
        [apiProxy]: {
          target: apiTarget,
          changeOrigin: true,
          rewrite: (path) => path.replace(new RegExp(`^${apiProxy}`), '/api')
        }
      } : undefined
    },
    // esbuild 配置
    esbuild: {
      // 生产环境移除 console 和 debugger
      drop: mode === 'prd' ? ['console', 'debugger'] : [],
      // 目标环境
      target: 'es2020',
      // 支持的格式
      format: 'esm'
    },
    // CSS 预处理器配置
    css: {
      preprocessorOptions: {
        scss: {
          // 静默弃用警告
          silenceDeprecations: ['legacy-js-api'],
          // 额外的配置选项
          charset: false
        }
      }
    },
    build: {
      outDir: 'dist',
      assetsDir: 'assets',
      sourcemap: mode === 'dev',
      // 使用 esbuild 进行压缩
      minify: 'esbuild',
      // 构建目标
      target: 'es2020',
      // chunk 大小警告阈值
      chunkSizeWarningLimit: 1000
    }
  }
})

